#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/workqueue.h>

// 定义一个工作队列结构体
static struct workqueue_struct* my_wq;
// 定义一个工作结构体
static struct work_struct my_work;

// 工作队列处理函数
static void my_work_handler(struct work_struct* work)
{
    printk(KERN_INFO "Work queue task is running\n");
}

// 模块初始化函数
static int __init my_module_init(void)
{
    // 创建一个新的工作队列
    my_wq = create_workqueue("my_workqueue");
    if (!my_wq) {
        printk(KERN_ERR "Failed to create workqueue\n");
        return -ENOMEM;
    }

    // 初始化工作
    INIT_WORK(&my_work, my_work_handler);

    // 将工作提交到工作队列
    queue_work(my_wq, &my_work);

    printk(KERN_INFO "Module initialized, work queued\n");
    return 0;
}

// 模块退出函数
static void __exit my_module_exit(void)
{
    // 取消挂起的工作
    cancel_work_sync(&my_work);
    // 销毁工作队列
    destroy_workqueue(my_wq);
    printk(KERN_INFO "Module exited\n");
}

module_init(my_module_init);
module_exit(my_module_exit);
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple work queue example");
MODULE_LICENSE("GPL");